Pagination এবং Sorting

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA)
270

স্প্রিং বুট জেপিএ (Spring Boot JPA) ডেটাবেসের সঙ্গে সম্পর্কিত অবজেক্ট ম্যানেজমেন্ট (ORM) সহজ করে তোলে। যখন ডেটাবেসের বড় পরিমাণ ডেটা নিয়ে কাজ করা হয়, তখন Pagination (পেজিনেশন) এবং Sorting (সর্টিং) গুরুত্বপূর্ণ ভূমিকা পালন করে। স্প্রিং ডেটা জেপিএ ডেভেলপারদের জন্য পেজিনেশন এবং সর্টিং অপারেশন সহজভাবে পরিচালনা করার জন্য অনেক সুবিধা প্রদান করে। এই দুটি ফিচার ব্যবহারের মাধ্যমে ডেটাবেসে বড় ডেটাসেটকে ছোট অংশে বিভক্ত করা যায় এবং ডেটা সঠিকভাবে সাজানো যায়।


Pagination এবং Sorting এর প্রয়োজনীয়তা

  1. Pagination (পেজিনেশন):
    • বড় ডেটাসেটের জন্য Pagination অত্যন্ত গুরুত্বপূর্ণ। এটি ডেটাকে ছোট পৃষ্ঠায় বিভক্ত করে ডেটা ফেচিং দ্রুত করে এবং সার্ভার রিসোর্স বাঁচায়।
    • একে page size (পেজ সাইজ) এবং page number (পেজ নাম্বার) দ্বারা কনফিগার করা হয়, যা ডেটা রিট্রিভ করার সময় কার্যকরী হয়।
  2. Sorting (সর্টিং):
    • Sorting ডেটাকে নির্দিষ্ট ক্রমে সাজানোর জন্য ব্যবহৃত হয়, যেমন ascending (অবধি) বা descending (অবনতি) অর্ডারে।
    • এটি ব্যবহারকারীকে বা অ্যাপ্লিকেশনকে সহজে ডেটার মধ্যে অনুসন্ধান করতে সাহায্য করে।

Spring Data JPA তে Pagination এবং Sorting ব্যবহারের উদাহরণ

স্প্রিং ডেটা জেপিএ তে পেজিনেশন এবং সর্টিং ব্যবহারের জন্য Pageable এবং Sort ইন্টারফেস ব্যবহার করা হয়। Pageable পেজের আকার এবং পেজ নম্বর নির্ধারণ করতে সাহায্য করে, এবং Sort ডেটাকে ক্রমবদ্ধভাবে সাজানোর জন্য ব্যবহৃত হয়।

Step ১: Entity ক্লাস তৈরি

@Entity
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String department;
    private double salary;

    // Getters and Setters
}

এখানে, Employee ক্লাস তৈরি করা হয়েছে যেটি একটি ডেটাবেস টেবিলের প্রতিনিধিত্ব করে।


Step ২: Repository তৈরি

স্প্রিং ডেটা জেপিএ JpaRepository বা PagingAndSortingRepository ইন্টারফেস এক্সটেন্ড করার মাধ্যমে পেজিনেশন এবং সর্টিং সমর্থিত রেপোজিটরি তৈরি করা যায়।

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

public interface EmployeeRepository extends JpaRepository<Employee, Long> {

    // Pagination support
    Page<Employee> findByDepartment(String department, Pageable pageable);

    // Sorting support
    List<Employee> findByDepartment(String department, Sort sort);
}

Explanation:

  • findByDepartment মেথডে Pageable প্যারামিটার ব্যবহার করে পেজিনেশন সমর্থন করা হয়েছে।
  • findByDepartment মেথডে Sort প্যারামিটার ব্যবহার করে সর্টিং সমর্থন করা হয়েছে।

Step ৩: Service ক্লাস তৈরি

স্প্রিং সার্ভিস ক্লাসে Repository ইনজেক্ট করে পেজিনেশন এবং সর্টিং অপারেশন প্রয়োগ করা হয়।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public Page<Employee> getEmployeesByDepartmentWithPagination(String department, int page, int size) {
        PageRequest pageRequest = PageRequest.of(page, size);
        return employeeRepository.findByDepartment(department, pageRequest);
    }

    public List<Employee> getEmployeesByDepartmentWithSorting(String department, String sortBy) {
        Sort sort = Sort.by(Sort.Order.asc(sortBy));  // Ascending order
        return employeeRepository.findByDepartment(department, sort);
    }
}

Explanation:

  • getEmployeesByDepartmentWithPagination মেথডে PageRequest.of(page, size) ব্যবহার করে পেজিনেশন কনফিগার করা হয়েছে।
  • getEmployeesByDepartmentWithSorting মেথডে Sort.by(Sort.Order.asc(sortBy)) ব্যবহার করে সর্টিং কনফিগার করা হয়েছে।

Step ৪: Controller ক্লাস তৈরি

স্প্রিং এমভিসি Controller ক্লাসে সার্ভিস মেথডগুলি কল করে ডেটা রিটার্ন করা হয়।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @GetMapping("/employees/department/{department}/page/{page}/size/{size}")
    public Page<Employee> getEmployeesByDepartmentWithPagination(@PathVariable String department, 
                                                                  @PathVariable int page, 
                                                                  @PathVariable int size) {
        return employeeService.getEmployeesByDepartmentWithPagination(department, page, size);
    }

    @GetMapping("/employees/department/{department}/sort")
    public List<Employee> getEmployeesByDepartmentWithSorting(@PathVariable String department, 
                                                              @RequestParam String sortBy) {
        return employeeService.getEmployeesByDepartmentWithSorting(department, sortBy);
    }
}

Explanation:

  • Pagination Endpoint: /employees/department/{department}/page/{page}/size/{size} এই URL প্যাটার্নে পেজিনেশন প্রক্রিয়া পরিচালনা করা হয়।
  • Sorting Endpoint: /employees/department/{department}/sort এই URL প্যাটার্নে সর্টিং প্রক্রিয়া পরিচালনা করা হয়।

Pagination এবং Sorting এর সুবিধা

  1. বড় ডেটাসেট ম্যানেজ করা সহজ: পেজিনেশন ব্যবহার করলে ডেটা ছোট ছোট অংশে ভাগ করা যায়, যা বড় ডেটাসেটের সাথে কাজ করার সময় পারফরম্যান্স বাড়ায়।
  2. কার্যক্ষমতা বৃদ্ধি: ডেটাবেসের লোড কমিয়ে, শুধুমাত্র প্রয়োজনীয় ডেটা রিট্রিভ করা হয়।
  3. ব্যবহারকারী অভিজ্ঞতা উন্নত: পেজিনেশন ব্যবহারকারীদের ডেটা দ্রুত অ্যাক্সেস করতে সাহায্য করে, এবং সর্টিং তাদের প্রয়োজনীয় তথ্য সাজানো ভাবে দেখতে দেয়।

উপসংহার

স্প্রিং ডেটা জেপিএ তে Pagination এবং Sorting ব্যবহারের মাধ্যমে ডেটাবেসের বড় ডেটাসেট সহজে ম্যানেজ করা যায়। স্প্রিং কনটেইনার এবং PageableSort ইন্টারফেস ব্যবহার করে পেজিনেশন এবং সর্টিং অপারেশনগুলো খুবই সহজ ও কার্যকরভাবে করা যায়। এর মাধ্যমে ডেটা সঠিকভাবে সাজানো এবং বড় ডেটাবেসের সাথে কাজ করা অনেক সহজ হয়ে ওঠে।


Content added By

Pagination এবং Sorting এর ধারণা

336

Pagination এবং Sorting হল Spring Data JPA-এর দুটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডেটাবেস থেকে ডেটা রিট্রিভ করার সময় কার্যকারিতা এবং পারফরম্যান্স বৃদ্ধি করতে সাহায্য করে। বড় ডেটাসেটের সাথে কাজ করার সময় Pagination এবং Sorting এর মাধ্যমে আপনি ডেটা সঠিকভাবে এবং কার্যকরীভাবে ম্যানেজ করতে পারবেন।

1. Pagination (পেজিনেশন)

Pagination হল একটি কৌশল যা ডেটাবেসের বৃহত পরিমাণ ডেটাকে ছোট ছোট পৃষ্ঠায় ভাগ করে রিট্রিভ করে। এর মাধ্যমে আপনি নির্দিষ্ট সংখ্যা ডেটা (যেমন প্রতি পৃষ্ঠায় ২০টি আইটেম) একে একে লোড করতে পারেন, যা অ্যাপ্লিকেশনকে দ্রুত এবং আরও দক্ষ করে তোলে।

Spring Data JPA তে Pagination কার্যকরভাবে ব্যবহৃত হয় Pageable ইন্টারফেসের মাধ্যমে। Pagination ব্যবহার করলে, আপনি Page অবজেক্ট পান, যা ডেটার পরিমাণ, মোট পৃষ্ঠা এবং অন্যান্য পেজিনেশন সম্পর্কিত তথ্য ধারণ করে।

Pagination এর সুবিধা:

  • Efficient data retrieval: বৃহত ডেটাসেট রিট্রিভ করার জন্য পেজিনেশন ডেটার লোডিং দ্রুত এবং কার্যকর করে।
  • Reduces Memory Usage: একসাথে সমস্ত ডেটা লোড না করে, পেজিনেশন শুধুমাত্র প্রয়োজনীয় ডেটাই লোড করে, ফলে মেমরি ব্যবহার কম হয়।

উদাহরণ:

Step 1: Entity Class

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Double price;

    // Getters and Setters
}

Step 2: Repository Interface

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
    // Pagination with Pageable parameter
    Page<Product> findAll(Pageable pageable);
}

Step 3: Service Class

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public Page<Product> getPaginatedProducts(int page, int size) {
        // Creating Pageable object with page number and page size
        Pageable pageable = PageRequest.of(page, size);
        return productRepository.findAll(pageable);
    }
}

Step 4: Controller Class

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {

    @Autowired
    private ProductService productService;

    @GetMapping("/products")
    public Page<Product> getPaginatedProducts(@RequestParam int page, @RequestParam int size) {
        return productService.getPaginatedProducts(page, size);
    }
}

এই উদাহরণে, PageRequest.of(page, size) ব্যবহার করা হয়েছে, যেখানে page হল পৃষ্ঠা নম্বর এবং size হল প্রতিটি পৃষ্ঠায় কতটি আইটেম দেখতে চান।


2. Sorting (সোর্টিং)

Sorting হল একটি প্রক্রিয়া যা ডেটাকে নির্দিষ্ট একটি ক্রমে সাজাতে সাহায্য করে (যেমন ascending বা descending) কোনও নির্দিষ্ট ক্ষেত্রের (column) ভিত্তিতে। Spring Data JPA তে Sorting করার জন্য Sort ক্লাস ব্যবহার করা হয়। Sorting ব্যবহার করলে ডেটা সাধারণত একটি নির্দিষ্ট ফিল্ড বা কলাম অনুযায়ী সাজানো হয়।

Sorting এর সুবিধা:

  • Organized Data: সঠিক ক্রমে ডেটা সাজানো ডেটা বিশ্লেষণ এবং ব্যবহারকে সহজ করে।
  • Improves User Experience: ইউজাররা যখন ডেটা সঠিকভাবে সাজানো অবস্থায় দেখতে পায়, তখন অ্যাপ্লিকেশনের ইউজার এক্সপেরিয়েন্স বৃদ্ধি পায়।

উদাহরণ:

Step 1: Entity Class

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Double price;

    // Getters and Setters
}

Step 2: Repository Interface with Sorting

import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface ProductRepository extends JpaRepository<Product, Long> {
    List<Product> findAll(Sort sort);
}

Step 3: Service Class

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public List<Product> getSortedProducts(String sortBy, boolean ascending) {
        Sort sort = ascending ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
        return productRepository.findAll(sort);
    }
}

Step 4: Controller Class

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class ProductController {

    @Autowired
    private ProductService productService;

    @GetMapping("/products/sorted")
    public List<Product> getSortedProducts(@RequestParam String sortBy, @RequestParam boolean ascending) {
        return productService.getSortedProducts(sortBy, ascending);
    }
}

এখানে, Sort.by(sortBy) ব্যবহার করে ডেটা ascending বা descending অর্ডারে সাজানো হচ্ছে, এবং sortBy প্যারামিটার অনুযায়ী কোন ফিল্ড দ্বারা সোর্ট করা হবে তা নির্ধারণ করা হচ্ছে।


Pagination এবং Sorting একসাথে ব্যবহার

Spring Data JPA তে Pagination এবং Sorting একসাথে ব্যবহার করা যায়। যখন আপনি ডেটাকে পেজিনেট করবেন এবং সেই সাথে সোর্টিংও করবেন, তখন PageRequest এবং Sort একসাথে ব্যবহার করা হয়।

উদাহরণ:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public Page<Product> getSortedPaginatedProducts(int page, int size, String sortBy, boolean ascending) {
        Sort sort = ascending ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
        PageRequest pageRequest = PageRequest.of(page, size, sort);
        return productRepository.findAll(pageRequest);
    }
}

Controller:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {

    @Autowired
    private ProductService productService;

    @GetMapping("/products/sortedPaginated")
    public Page<Product> getSortedPaginatedProducts(@RequestParam int page, @RequestParam int size, @RequestParam String sortBy, @RequestParam boolean ascending) {
        return productService.getSortedPaginatedProducts(page, size, sortBy, ascending);
    }
}

এখানে, PageRequest.of(page, size, sort) ব্যবহার করে ডেটা পেজিনেট করা হচ্ছে এবং সেই সাথে সঠিক ক্রমে সাজানো হচ্ছে।


সারাংশ

Pagination এবং Sorting হল Spring Data JPA-তে গুরুত্বপূর্ণ বৈশিষ্ট্য যা বড় ডেটাসেট ম্যানেজমেন্টে কার্যকারিতা এবং স্কেলেবিলিটি বৃদ্ধি করে। Pagination ডেটাকে ছোট ছোট পৃষ্ঠায় ভাগ করে, এবং Sorting ডেটাকে সঠিক ক্রমে সাজিয়ে ডেটাবেস অপারেশনগুলিকে আরও দ্রুত এবং কার্যকর করে তোলে। Pageable এবং Sort ক্লাস ব্যবহার করে Spring Data JPA এ সহজে Pagination এবং Sorting কার্যকরভাবে পরিচালনা করা সম্ভব।

Content added By

Pageable এবং Sort Interface এর ব্যবহার

338

Spring Data JPA-তে Pageable এবং Sort ইন্টারফেসগুলি খুবই গুরুত্বপূর্ণ, কারণ এগুলোর মাধ্যমে আপনি পেজিনেশন (Pagination) এবং সাজানো (Sorting) ডেটা সহজেই ম্যানেজ করতে পারেন। এই ইন্টারফেসগুলো Spring JPA-কে আপনার ডেটাবেস থেকে বড় ডেটাসেট গুলি সহজে এবং কার্যকরভাবে পরিসীমাবদ্ধ এবং সাজানোর সুবিধা দেয়।

এখানে Pageable এবং Sort ইন্টারফেস ব্যবহার করার উদাহরণ এবং তাদের সুবিধা আলোচনা করা হবে।


1. Pageable Interface

Pageable ইন্টারফেসটি ডেটাবেস থেকে ডেটা পেজিনেশন করার জন্য ব্যবহৃত হয়। পেজিনেশন ডেটার একটি নির্দিষ্ট সাইজের পৃষ্ঠায় বিভক্ত করে এবং এটি ডেটার সবগুলো পৃষ্ঠায় নেভিগেশন করার সুবিধা দেয়।

Pageable এর প্রধান ফিচার:

  • Page: এটি পেজের ডেটা সংরক্ষণ করে।
  • Size: এটি প্রতি পেজে কতটি রেকর্ড থাকতে হবে তা নির্ধারণ করে।
  • Page number: এটি পেজের সংখ্যা নির্ধারণ করে।
  • Sort: এটি ডেটা সাজানোর জন্য ব্যবহৃত হয়।

2. Sort Interface

Sort ইন্টারফেসটি Spring Data JPA-তে ডেটা সাজানোর জন্য ব্যবহৃত হয়। এটি Ascending (ASC) বা Descending (DESC) অর্ডারে ডেটা সাজাতে সাহায্য করে।


Pageable এবং Sort এর ব্যবহারের উদাহরণ

১. Pageable এবং Sort এর সাথে Repository তৈরি করা

Spring Data JPA-তে PagingAndSortingRepository ইন্টারফেস ব্যবহার করে পেজিনেশন এবং সাজানোর জন্য সহজে মেথড তৈরি করা যায়।

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {

    // Pageable এর মাধ্যমে পেজিনেশন
    Page<Product> findByNameContaining(String name, Pageable pageable);

    // Sort এর মাধ্যমে সাজানো
    List<Product> findByNameContaining(String name, Sort sort);
}

এখানে:

  • findByNameContaining(): এই মেথডটি name ফিল্ডে নির্দিষ্ট কিছু শব্দ বা অংশ অনুসন্ধান করে, এবং Pageable ব্যবহার করে পেজিনেশন প্রয়োগ করে।
  • findByNameContaining(): দ্বিতীয় মেথডটি Sort ব্যবহার করে ডেটা সাজানোর জন্য ব্যবহৃত হয়।

২. Pageable এবং Sort এর সাথে Service Layer

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    // Pageable এর মাধ্যমে পেজিনেশন
    public Page<Product> getPaginatedProducts(int page, int size) {
        Pageable pageable = PageRequest.of(page, size);  // Page number এবং size নির্ধারণ
        return productRepository.findByNameContaining("Phone", pageable);  // পেজিনেটেড ডেটা
    }

    // Sort এর মাধ্যমে সাজানো
    public List<Product> getSortedProducts() {
        Sort sort = Sort.by(Sort.Order.asc("name"));  // নাম অনুযায়ী সাজানো (ascending)
        return productRepository.findByNameContaining("Phone", sort);  // সাজানো ডেটা
    }
}

এখানে:

  • PageRequest.of(page, size): এটি একটি পেজ রিকোয়েস্ট তৈরি করে, যেখানে page হলো পেজের সংখ্যা এবং size হলো প্রতি পেজে রেকর্ডের সংখ্যা।
  • Sort.by(Sort.Order.asc("name")): এখানে ডেটাকে নাম অনুসারে ascending (ASC) অর্ডারে সাজানো হচ্ছে।

৩. Controller Layer এ Pageable এবং Sort ব্যবহার করা

Spring Boot অ্যাপ্লিকেশনে Pageable এবং Sort ব্যবহার করে পেজিনেশন এবং সাজানো ডেটা REST API এর মাধ্যমে প্রেরণ করা যায়।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {

    @Autowired
    private ProductService productService;

    // পেজিনেটেড ডেটা রিটার্ন করা
    @GetMapping("/products")
    public Page<Product> getProducts(@RequestParam int page, @RequestParam int size) {
        return productService.getPaginatedProducts(page, size);
    }

    // সাজানো ডেটা রিটার্ন করা
    @GetMapping("/products/sorted")
    public List<Product> getSortedProducts() {
        return productService.getSortedProducts();
    }
}

এখানে:

  • getProducts() মেথডটি পেজিনেটেড ডেটা রিটার্ন করবে।
  • getSortedProducts() মেথডটি সাজানো ডেটা রিটার্ন করবে।

4. Pageable এবং Sort এর কনফিগারেশন

Pageable Configuration:

Pageable কনফিগারেশনে page (পেজ নম্বর) এবং size (প্রতি পেজে রেকর্ড সংখ্যা) নির্ধারণ করা হয়।

PageRequest.of(page, size, Sort.by(Sort.Order.asc("name")));

Sort Configuration:

Sort কনফিগারেশন ডেটাকে ascending (ASC) বা descending (DESC) অর্ডারে সাজানোর জন্য ব্যবহৃত হয়।

Sort sort = Sort.by(Sort.Order.asc("name"));

এখানে, Sort.Order.asc("name") ব্যবহার করে name ফিল্ড অনুযায়ী ডেটা ascending order-এ সাজানো হচ্ছে। আপনি Sort.Order.desc() ব্যবহার করে ডেটা descending order-এ সাজাতে পারেন।


সারাংশ

  • Pageable এবং Sort ইন্টারফেস Spring Data JPA-তে পেজিনেশন এবং সাজানো ডেটার জন্য ব্যবহৃত হয়।
  • Pageable পেজ রিকোয়েস্ট তৈরি করতে ব্যবহৃত হয়, যেখানে page এবং size নির্ধারণ করা হয়।
  • Sort ডেটাকে নির্দিষ্ট ক্রমে সাজাতে ব্যবহৃত হয়, যেমন ascending বা descending অর্ডারে।
  • JpaRepository অথবা PagingAndSortingRepository ইন্টারফেসের মাধ্যমে আপনি সহজেই পেজিনেশন এবং সাজানো ডেটা ফেচ করতে পারেন।

এই ফিচারগুলো Spring Boot JPA-তে ডেটাবেস অপারেশনকে আরও কার্যকর এবং দক্ষভাবে পরিচালনা করতে সাহায্য করে।

Content added By

উদাহরণ সহ Pagination এবং Sorting

352

Spring Boot JPA এর মাধ্যমে ডেটাবেস থেকে তথ্য নিয়ে আসা অনেক সময় বড় ডেটাসেট বা রেকর্ডের সংখ্যা বেশি হতে পারে, যা অনেক সময় অ্যাপ্লিকেশনের পারফরম্যান্সকে ক্ষতিগ্রস্ত করে। এই সমস্যার সমাধান করতে Pagination এবং Sorting ব্যবহার করা হয়। Spring Data JPA-তে Pagination এবং Sorting অত্যন্ত সহজভাবে এবং স্বয়ংক্রিয়ভাবে করা যায়।

এই টিউটোরিয়ালে আমরা দেখবো কিভাবে Pagination এবং Sorting ব্যবহার করা যায় Spring Boot JPA এর মাধ্যমে, উদাহরণসহ।


Pagination এবং Sorting এর ধারণা

  • Pagination: Pagination হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাবেসের বড় আউটপুটকে ছোট ছোট পেইজে ভাগ করা হয়। এটি ডেটাবেস থেকে নির্দিষ্ট পরিমাণ রেকর্ড একটি পেইজে আনার জন্য ব্যবহৃত হয়, যাতে অ্যাপ্লিকেশন পারফরম্যান্স উন্নত হয় এবং ব্যবহারকারী একটি পেইজে ছোট পরিসরের ডেটা দেখতে পারে।
  • Sorting: Sorting হল ডেটা শৃঙ্খলা অনুযায়ী সাজানোর প্রক্রিয়া। এটি ব্যবহারকারীর জন্য ডেটাকে আরো সহজে পড়ার উপযোগী করে তোলে।

Spring Data JPA-তে Pageable এবং Sort ইন্টারফেস ব্যবহার করে সহজেই Pagination এবং Sorting করা যায়।


Spring Boot JPA তে Pagination এবং Sorting এর উদাহরণ

১. Entity ক্লাস তৈরি করা

প্রথমে আমরা একটি Product Entity তৈরি করবো, যেটি ডেটাবেসের একটি টেবিলের প্রতিনিধিত্ব করবে।

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private double price;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

এখানে Product Entity তৈরি করা হয়েছে যা ডেটাবেসে id, name, এবং price কলাম সম্বলিত একটি টেবিলের প্রতিনিধিত্ব করে।


২. JpaRepository তৈরি করা

JpaRepository ইন্টারফেস ব্যবহার করে CRUD অপারেশন এবং Pagination/Sorting করা যাবে। Spring Data JPA এটি স্বয়ংক্রিয়ভাবে বাস্তবায়ন করবে।

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {

    // Pagination এবং Sorting সহ ফাইন্ড
    Page<Product> findAll(Pageable pageable);

    // Price অনুযায়ী Sorting করা
    List<Product> findAll(Sort sort);
}

এখানে:

  • findAll(Pageable pageable): এটি Pagination সহ সমস্ত Product ফেচ করবে।
  • findAll(Sort sort): এটি Sorting সহ সমস্ত Product ফেচ করবে।

৩. Service Layer তৈরি করা

ProductService ক্লাসে আমরা Pagination এবং Sorting অপারেশনগুলিকে ব্যবহার করবো।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    // Pagination সহ Product ফেচ করা
    public Page<Product> getPaginatedProducts(int page, int size) {
        Pageable pageable = PageRequest.of(page, size);  // page, size অনুযায়ী Pageable তৈরি
        return productRepository.findAll(pageable);
    }

    // Sorting সহ Product ফেচ করা
    public List<Product> getSortedProducts(String sortBy) {
        Sort sort = Sort.by(sortBy).ascending();  // Sorting তৈরি করা
        return productRepository.findAll(sort);
    }
}

এখানে:

  • getPaginatedProducts(int page, int size) পদ্ধতিটি Pagination সহ ডেটা ফেচ করার জন্য ব্যবহৃত হয়।
  • getSortedProducts(String sortBy) পদ্ধতিটি Sorting সহ ডেটা ফেচ করার জন্য ব্যবহৃত হয়, যেখানে sortBy প্যারামিটার দিয়ে আপনি যে কলাম দিয়ে সোর্ট করতে চান সেটি নির্ধারণ করতে পারবেন (যেমন "name" বা "price" ইত্যাদি)।

৪. Controller Layer তৈরি করা

ProductController ক্লাসে আমরা REST API তৈরি করবো যা Pagination এবং Sorting অপারেশন সম্পাদন করবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    // Pagination সহ Product রিটার্ন করা
    @GetMapping("/paginated")
    public Page<Product> getPaginatedProducts(@RequestParam int page, @RequestParam int size) {
        return productService.getPaginatedProducts(page, size);
    }

    // Sorting সহ Product রিটার্ন করা
    @GetMapping("/sorted")
    public List<Product> getSortedProducts(@RequestParam String sortBy) {
        return productService.getSortedProducts(sortBy);
    }
}

এখানে:

  • /api/products/paginated API endpoint-এ আপনি page এবং size প্যারামিটার দিয়ে Pagination করতে পারবেন।
  • /api/products/sorted API endpoint-এ আপনি sortBy প্যারামিটার দিয়ে কোন কলাম দিয়ে Sorting করতে চান তা নির্ধারণ করতে পারবেন।

৫. Spring Boot অ্যাপ্লিকেশন চালানো

Spring Boot অ্যাপ্লিকেশন চালানোর জন্য @SpringBootApplication অ্যানোটেশন ব্যবহার করা হয়।

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootJpaApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootJpaApplication.class, args);
    }
}

এখানে @SpringBootApplication দ্বারা Spring Boot অ্যাপ্লিকেশন রান করবে এবং ProductController এ রুটটি এক্সপোজ করা হবে।


Pagination এবং Sorting ব্যবহারের সুবিধা

  1. Performance Improvement: Pagination ডেটার বড় পরিমাণের ক্ষেত্রে পারফরম্যান্স উন্নত করতে সহায়ক, কারণ এটি শুধুমাত্র নির্দিষ্ট পরিমাণ ডেটা একবারে লোড করে।
  2. Efficient Data Handling: Sorting এবং Pagination ডেটা টেবিলের মধ্যে দ্রুত অনুসন্ধান এবং সুশৃঙ্খল ডেটা রিটার্নে সহায়ক, যা ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।
  3. User-Friendly: Pagination ব্যবহার করে ব্যবহারকারীরা একটি নির্দিষ্ট সংখ্যক ডেটা দেখতে পারে, যা ডেটার দৃশ্যমানতা এবং এক্সেস সহজ করে।
  4. Customization: Sorting পদ্ধতি দ্বারা ব্যবহারকারীরা তাদের পছন্দ অনুযায়ী ডেটা সাজাতে পারে, যা অ্যাপ্লিকেশনটির নমনীয়তা বৃদ্ধি করে।

উপসংহার

Spring Boot JPA এবং Pagination এবং Sorting ব্যবহারের মাধ্যমে ডেটাবেস অপারেশনগুলিকে আরও কার্যকর এবং পারফরম্যান্স-অপ্টিমাইজড করা যায়। Pageable এবং Sort ইন্টারফেস ব্যবহার করে আপনি ডেটাবেস থেকে সীমিত পরিমাণ ডেটা এবং প্রয়োজনীয়ভাবে সাজানো ডেটা পেতে পারেন। এটি Spring Data JPA ব্যবহার করে ডেটা অ্যাক্সেসের সুবিধা দেয় এবং ব্যবহারকারী অভিজ্ঞতা বৃদ্ধি করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...